package br.com.hstar.client;


import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;

import br.com.hstar.client.config.CadQuartoUI;
import br.com.hstar.client.quarto.QuartoLabel;
import br.com.hstar.client.quarto.QuartoUI;
import br.com.hstar.client.usuario.LoginPanel;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.RootPanel;

public class HSTAR implements EntryPoint {
	
	//Static --------------------------------------------------------
	
	//Lista que contem todos os quartos da aplicacao
	private static List quartosList;
	private static List quartosLabelList;
	
	//preenche a forma de entrada e o tipo de pagamento
	public static String dinheiro = "Dinheiro"; //0
	public static String cheque   = "Cheque";   //1
	public static String cartao   = "Cartão";   //2
	
	public static String carro     = "Carro";     //0
	public static String moto      = "Moto";      //1
	public static String bicicleta = "Bicicleta"; //2
	public static String pes       = "À Pé";      //3
	public static String taxi      = "Taxi";      //4
	
	//Metodo Principal ----------------------------------------------
	/**
	 * Metodo principal chamado no inicio da aplicacao.
	 */
	public void onModuleLoad() {		
		ServiceFactory.createCadQuartoService().listAll(new LoadQuartosAsyncCallback());
	}
	
	public void carregaTelaPrincipal() {
		RootPanel.get("boxContent").clear();
		RootPanel.get("boxContent").add(new LoginPanel("Efetue o Login"));		
	}
	
    
	//Methods ------------------------------------------------------------------

	/**
	 * Metodo usado para popular a tela de editar quarto. Este metodo
	 * popula a lista de pagamento e a forma de entrada dos clientes.
	 */
	public static void populateLists(ListBox tipoPagamento, ListBox formaEntrada) {
		
		//nao popula mais essa lista
		//lista de TIPO DE PAGAMENTO
		//tipoPagamento.addItem(dinheiro, "0");
		//tipoPagamento.addItem(cheque,   "1");
		//tipoPagamento.addItem(cartao,   "2");
		
		//lista de FORMA DE ENTRADA
		formaEntrada.addItem(carro, "0");
		formaEntrada.addItem(moto, "0");
		formaEntrada.addItem(bicicleta, "0");
		formaEntrada.addItem(pes, "0");
		formaEntrada.addItem(taxi, "0");
	}
	
	/**
	 * Converte uma data para String
	 * @param date
	 * @return
	 */
	public static String convertDateToString(Date date) {
		if (date == null) {
			throw new IllegalArgumentException(
					"Invalid date: cannot convert this date");
		}

		int dayOfMonth = date.getDate();
		// O mês deve ser adicionado de 1 unidade pois pelo padrão Java
		// o mês de janeiro é representado por 0.
		int month = date.getMonth() + 1;
		int year = date.getYear() + 1900;

		String dateString = dayOfMonth + "/" + month + "/" + year;

		return dateString;
	}

	/**
	 * Get
	 */
	public static List getQuartosLabelList() {
		return quartosLabelList;
	}

	
	//=========================================================================
	/**
	 * Metodo que carrega a lista de quartos da aplicacao.
	 */
	private class LoadQuartosAsyncCallback implements AsyncCallback {

		public void onFailure(Throwable caught) {
		}
		public void onSuccess(Object result) {
			//Window.alert("passou " + result.toString());
			if(result != null) {
				quartosList = new ArrayList();
				quartosLabelList = new ArrayList();
				List cadQuartos = (List)result;
				for (int i = 0; i < cadQuartos.size(); i++) {
					CadQuartoUI cad = (CadQuartoUI)cadQuartos.get(i);
					quartosList.add(createQuartoUI(cad.getNumero()));
				}
			}
			//ordena a lista de quartoUI
			Collections.sort(quartosList, new QuartoUI());
			
			//+++++++++++++++++++++++++++++++++++++++++++++++++
			//cria a lista de quartoLabel
			for (int i = 0; i < quartosList.size(); i++) {
				QuartoUI quarto = (QuartoUI)quartosList.get(i);
				quartosLabelList.add(createQuartoLabel(quarto));
			}
			//+++++++++++++++++++++++++++++++++++++++++++++++++
			
			//agora, coloca todo o conteúdo na tela principal
			carregaTelaPrincipal();
		}		
	}
	
	/**
	 * Metodo que retorna um QuartoUI, que sera usado no metodo
	 * acima para criar todos os quartos.
	 */
	private static QuartoUI createQuartoUI(Integer numero) {
		QuartoUI q = new QuartoUI();
		q.setSituacao(new Integer(0));
		q.setNumero(numero);
		return q;
	}
	
	/**
	 * Metodo que cria os QuartoLabels
	 */
	private static QuartoLabel createQuartoLabel(QuartoUI qUI) {
		QuartoLabel q = new QuartoLabel(qUI.getNumero().toString(), qUI);
		return q;
	}
	
}
